package Gestores.DtoObjects;

import Gestores.DaoInterfaces.TituloAcademicoDAO;
import Gestores.DataBaseLink;
import Gestores.Entidades.EntidadTituloAcademico;
import Gestores.NucleoBaseDatos;
import java.sql.Date;
import java.sql.ResultSet;
import java.util.ArrayList;

public class TituloAcademicoDTO implements TituloAcademicoDAO {

    private DataBaseLink gestor;

    public TituloAcademicoDTO() {
        gestor = NucleoBaseDatos.getInstance();
    }

    @Override
    public ArrayList<Object> buscarPorNumero(int numero) throws Exception {
        return devolverLista(gestor.executeSql("Call BuscarTituloAcademicoPorNumero(" + numero + ");"));
    }

    @Override
    public ArrayList<Object> buscarPorIdAfiliado(String idAfiliado) throws Exception {
        return devolverLista(gestor.executeSql("Call BuscarTituloAcademicoPorIdAfiliado('" + idAfiliado + "');"));
    }

    @Override
    public ArrayList<Object> buscarPorUniversidad(String universidad) throws Exception {
        return devolverLista(gestor.executeSql("Call BuscarTituloAcademicoPorUniversidad('" + universidad + "');"));
    }

    @Override
    public ArrayList<Object> buscarPorPais(String pais) throws Exception {
        return devolverLista(gestor.executeSql("Call BuscarTituloAcademicoPorPais('" + pais + "');"));
    }

    @Override
    public ArrayList<Object> buscarPorFecha(Date fecha) throws Exception {
        return devolverLista(gestor.executeSql("Call BuscarTituloAcademicoPorFecha('" + fecha.toString() + "');"));
    }

    @Override
    public void insertar(Object objeto) throws Exception {
        EntidadTituloAcademico eta = (EntidadTituloAcademico) objeto;
        gestor.executeSql("Call InsertarTituloAcademico(" + eta.cadenaParaInsercion() + ");");
    }

    @Override
    public void actualizar(Object primaryKey, Object objeto) throws Exception {
        String idAfiliado = (String) primaryKey;
        EntidadTituloAcademico eta = (EntidadTituloAcademico) objeto;
        gestor.executeSql("Call ActualizarTituloAcademico('" + idAfiliado + "'," + eta.cadenaParaActualizacion() + ");");
    }

    @Override
    public void eliminacionLogica(Object objeto) throws Exception {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void eliminacionFisica(Object objeto) throws Exception {
        EntidadTituloAcademico eta = (EntidadTituloAcademico) objeto;
        gestor.executeSql("Call EliminarTituloAcademico(" + eta.cadenaParaEliminacion() + ");");
    }

    @Override
    public ArrayList<Object> listarTabla() throws Exception {
        return devolverLista(gestor.executeSql("Call ListarTituloAcademico();"));
    }

    private ArrayList<Object> devolverLista(ResultSet resultado) throws Exception {
        ArrayList<Object> lista = new ArrayList<Object>();
        while (resultado.next()) {
            EntidadTituloAcademico eta = new EntidadTituloAcademico();
            eta.setNumero(resultado.getInt(1));
            eta.setId_afiliado(resultado.getString(2));
            eta.setDescripcion(resultado.getString(3));
            eta.setUniversidad(resultado.getString(4));
            eta.setPais(resultado.getString(5));
            eta.setFecha(resultado.getDate(6));
            lista.add(eta);
        }
        return lista;
    }

    @Override
    public boolean existe(int numero) throws Exception {
        ResultSet resultSet = gestor.executeSql("Select ExisteTituloAcademico(" + numero + ");");
        resultSet.next();
        return resultSet.getBoolean(1);
    }
}
